/**
 * All-right reserved by gglu\lqz\qq 2010-2020
 */
package com.injury.hunan.dao.common;

import java.io.Serializable;
import java.sql.SQLException;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;

import com.injury.hunan.common.PageUtil;

/**
 * 请写上此类的主要功能
 * @author gglu
 * @version 2008年7月20日 下午11:54:58
 * @surpportjdk 1.5+
 */
public class CommonEntityDao<T> extends InjuryHibernateDaoSurpport implements ICommonEntityDao<T> {

	/**
	 * @author ThinKPad
	 * @since 2008年7月21日 上午12:06:36
	 * @see com.injury.hunan.dao.common.ICommonEntityDao#save(java.lang.Object)
	 */
	public void save(T entity) {
		
		getHibernateTemplate().save(entity);
	}

	/**
	 * @author ThinKPad
	 * @since 2008年7月21日 上午12:06:36
	 * @see com.injury.hunan.dao.common.ICommonEntityDao#update(java.lang.Object)
	 */
	public void update(T entity) {
		
		getHibernateTemplate().update(entity);
	}

	/**
	 * @author ThinKPad
	 * @since 2008年7月21日 上午12:06:36
	 * @see com.injury.hunan.dao.common.ICommonEntityDao#refresh(java.lang.Object)
	 */
	public void refresh(T entity) {
		
		getHibernateTemplate().refresh(entity);
	}

	/**
	 * @author ThinKPad
	 * @since 2008年7月21日 上午12:06:36
	 * @see com.injury.hunan.dao.common.ICommonEntityDao#merge(java.lang.Object)
	 */
	public T merge(T entity) {

		return getHibernateTemplate().merge(entity);
	}

	/**
	 * @author ThinKPad
	 * @since 2008年7月21日 上午12:06:36
	 * @see com.injury.hunan.dao.common.ICommonEntityDao#delete(java.lang.Class,
	 *      java.io.Serializable)
	 */
	public void delete(Class<T> clazz, Serializable primaryKey) {
		
		T entity = getHibernateTemplate().get(clazz, primaryKey);
		// 执行查询，主要考虑后期缓存加入.
		delete(entity);//
	}
	
	

	/** 
	 * @author ThinKPad
	 * @since 2008年7月21日 上午12:12:50
	 * @see com.injury.hunan.dao.common.ICommonEntityDao#delete(java.lang.Object)
	 */
	public void delete(T entity) {
		getHibernateTemplate().delete(entity);
	}

	/**
	 * @author ThinKPad
	 * @since 2008年7月21日 上午12:06:36
	 * @see com.injury.hunan.dao.common.ICommonEntityDao#findByKey(java.lang.Class,
	 *      java.io.Serializable)
	 */
	public T findByKey(Class<T> clazz, Serializable primaryKey) {
		
		return getHibernateTemplate().get(clazz, primaryKey);
	}

	/**
	 * @author ThinKPad
	 * @since 2008年7月21日 上午12:06:36
	 * @see com.injury.hunan.dao.common.ICommonEntityDao#findWithPage(java.lang.Class,
	 *      com.injury.hunan.common.PageUtil)
	 */
	public void findWithPage(final Class<T> clazz, final PageUtil<T> page) {

		getHibernateTemplate().executeWithNativeSession(new HibernateCallback<Void>() {

			/**
			 * @author ThinKPad
			 * @since 2008年7月21日 上午12:14:44
			 * @see org.springframework.orm.hibernate3.HibernateCallback#doInHibernate(org.hibernate.Session)
			 */
			public Void doInHibernate(Session session) throws HibernateException, SQLException {

				
				throw new RuntimeException("暂不支持分页查询...");
				/*return null;*/
			}

		});
	}

	

	

}
